package com.animee.health.food_list;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;
import com.animee.health.food_grid.FoodDescActivity;
import com.animee.health.utils.DBTools;
import com.animee.health.utils.DataDB;

import java.util.ArrayList;
import java.util.List;

public class InfoListActivity extends AppCompatActivity implements View.OnClickListener {
    EditText searchEt;
    ImageView searchIv, flushIv;
    ListView showLv;
    // 声明ListView内部数据源,是foodBean类型
    List<FoodBean> mDatas;
    // 全部的数据源也添进去
    List<FoodBean> allFoodList;
    DataDB db;
    // DataDB db = new DataDB(InfoListActivity.this, "Data.db", null, 1);
    DBTools tools = new DBTools();
    private InfoListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_info_list);
        // 查找控件
        initView();
        // 2.找到ListView对应的数据源
        // 对数据源进行初始化
        mDatas = new ArrayList<>();
        // 调用FoodUtils中的方法,获取其中的全部数据源,存储到allFoodList当中
        // allFoodList = FoodUtils.getAllFoodList();
        // 使用DBTools中的select方法, 获取其中的全部数据源, 存储到allFoodList当中
        db = new DataDB(InfoListActivity.this, "Data.db", null, 1);
        allFoodList = tools.select(db.getReadableDatabase());
        // 将获取的数据源添加到mDatas当中
        mDatas.addAll(allFoodList);
        // 3.创建适配器  BaseAdapter的子类
        adapter = new InfoListAdapter(this, mDatas);
        showLv.setAdapter(adapter); // 4.设置适配器, 为ListView指定要显示的列表项
        // 设置单向点击监听功能
        setListener();
    }

    // ListView点击的单向监听,没点击一mDatas跳转到对应FoodDesc
    private void setListener() {
        // 单向点击监听
        showLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            // 需要一个接口,传入当前的对象
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // 得到这个对象
                FoodBean foodBean = mDatas.get(position);
                // 通过Intent实现InfoListActivity到详情页面的跳转
                Intent intent = new Intent(InfoListActivity.this, FoodDescActivity.class);
                // 传递虚类化的数据(mplements Serializable:让FoodBean可以实现虚类化的接口)
                intent.putExtra("food", foodBean);
                startActivity(intent);
            }
        });
    }

    private void initView() {
        searchEt = findViewById(R.id.info_et_search);
        searchIv = findViewById(R.id.info_iv_search);
        flushIv = findViewById(R.id.info_iv_flush);
        showLv = findViewById(R.id.infolist_lv);
        searchIv.setOnClickListener(this);          // 为搜索Iv组件, 添加点击事件的监听器
        flushIv.setOnClickListener(this);           // 为刷新Iv组件, 添加点击事件的监听器
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            // 刷新点击,数据源又回到了原来的数据源
            case R.id.info_iv_flush:
                searchEt.setText("");
                mDatas.clear();
                mDatas.addAll(allFoodList);
                // 数据源发生改变,提示适配器更新
                adapter.notifyDataSetChanged();
                break;
            // 搜索点击,搜索的内容发生了改变
            case R.id.info_iv_search:
                // 1.获取输入内容，判断不为空
                // trim()去掉前后输入的空格
                String msg = searchEt.getText().toString().trim();  // 获取输入信息
                if (TextUtils.isEmpty(msg)) {
                    Toast.makeText(this, "输入内容不能为空！", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 判断所有食物列表的标题是否包含输入内容，如果包含，就添加到小集合中
                List<FoodBean> list = new ArrayList<>();
                for (int i = 0; i < allFoodList.size(); i++) {
                    String title = allFoodList.get(i).getTitle();
                    if (title.contains(msg)) {
                        list.add(allFoodList.get(i));
                    }
                }
                // 3.将原来的数据替换为List里的数据
                mDatas.clear();   // 清空原来的数据源.先清空ListView的适配器数据源内容
                mDatas.addAll(list);  // 替换成新的.添加新的数据到数据源中
                adapter.notifyDataSetChanged(); // 数据源发生改变,提示适配器更新
                break;
        }
    }
}
// 原本显示的是对象mDatas(line48)传入的数据元,把输入的搜索数据源放在list中,再用list替换mDatas,
// 就可以实现只显示输入搜索框的内容
